package cn.bonoon.kernel.menus;

import java.util.List;

import cn.bonoon.kernel.menus.layouts.LayoutGenerable;
import cn.bonoon.kernel.menus.privileges.ChannelPrivilegeInspector;
import cn.bonoon.kernel.support.IOperator;

/**
 * 这是一个子系统的定义
 * 可以从这个子系统的定义里拿到生成子系统界面所需要的信息
 * 定义类需要对应一个实例类，目前的方式是直接组成字符串，需要修改
 * 
 * 用于定义更高层次的内容，不是用于直接生成界面的内容
 * 
 * @author jackson
 *
 */
public interface ModuleDefinition extends StyleGetter/*, StyleDefinition*/{
	
	String DEFAULT_INDEX_NAME = "首页";
	
	/** 子系统的ID，经过加密，不可解 */
	String getId();
	
	/** 子系统的名称 */
	String getName();
	
	/** 进入该子系统的首页地址，这个地址不需要有权限就可以访问；
	 * 否则如果不能受权，就没人能进入子系统 */
	String getEndpoint();
	
	/** 可以在平台首页的子系统里显示进入该子系统的图标 */
	String getThumbnail();
	
	/** 嵌在首页上的一个个小的分块；如果首页的界面按模块来显示，则这里就会显示成为不同的模块 */
	List<PartDefinition> getParts();
	
	List<ChannelDefinition> getChannels(IOperator user, ChannelPrivilegeInspector privilege);
	
	/** 这个子系统下的所有频道，并且是有序的 */
	List<ChannelDefinition> getChannels();
	
	/** 平台或子系统的首页 */
	LayoutGenerable getIndex();
}
